<?php namespace module;

use houdunwang\request\Request;
use houdunwang\route\Controller;
use system\model\Module;

//公共控制器

/*
 * 起因：在module的controller中不能通过return view()，但可以return view('module/base/template/base/index.php');加载到正确的模板
 * 目的：可以发现正常加载方式，view里面的参数过于多，所以在这里做拼接路径，实现简化调用
 * 所谓的简化调用：return $this->template();
 */

//模板中加载模板处理
class HdController extends Controller
{
	use Wechat;
	protected $template;

	public function __construct()
	{
		//通过get函数获得地址栏中的m,得到当前的模块名
		$m = Request::get('m');
		//在数据库中读取模块名是$m的一条数据
		$module = Module::where('module_name',$m)->first();
		//通过数据库中的module_is_system的是不是1，判断是module模块或是addons模块
		//'/template/' 该处拼接的目录的名称，在该程序中是固定的
		$this->template = ($module['module_is_system'] == 1?'module':'addons').'/'.$m.'/template/';
	}

	//加载模板文件
	/*
	 *说明：return $this->template()
	 *     1.当函数不传参时，默认调用当前的action中的与方法名相同名字的模板
	 *     2.当函数传参时，调用的参数名字的模板
	 */
	protected function template ( $tpl = '' , $args = [] )
	{
		//将获得到的action参数转换成数组
		$info = explode('/',Request::get('action'));
		//info[2] 对应的是方法名
		//$info[1] 对应的是控制类
		$tpl  = empty($tpl)  ? $info[ 2 ] : $tpl;
		//拼成return view('module/base/template/base/index.php')的形式
		return view( $this->template . strtolower( $info[ 1 ] ) . '/' . $tpl , $args );
	}
}